package com.ccc.dingtalk.listener;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import com.ccc.dingtalk.service.dingtalk.ClockService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 定时任务处理器
 *
 * @author superC
 * @version 2.0.0
 * @date 2023/8/10
 */

@Component
public class ScheduleTask {
    protected static final Logger logger = LoggerFactory.getLogger(ScheduleTask.class);

    /**
     * cron表达式——修改未打卡的员工状态
     */
    @Value("${base.scheduler.cron.uptNotClockUsers}")
    private String uptNotClockUsersExpression;

    @Autowired
    private ClockService clockService;

    @Autowired
    private AppStartEvent appStartEvent;

    /**
     * 启动定时任务
     * 每天凌晨00:01:00触发，发送空对象
     */
    @Scheduled(cron = "0 1 0 * * ?")
    public void resetDataTask() {
        try {
            logger.info("【执行定时任务】-> 每天凌晨00:01:00，定时清空数据，向前端发送空数组！");
            logger.info("【执行定时任务】-> 当前时间：{}，启动定时任务，发送空对象给前端客户端。", DateUtil.now());
            WebSocket.sendObjectInfo(ListUtil.empty());
        } catch (Exception e) {
            logger.error("【执行定时任务】-> 【捕获异常-向前端发送空数组】\r\n异常记录：", e);
        }
    }

    /**
     * 启动定时任务
     * 每天凌晨01:00:00触发，重新获取钉钉用户
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void reGetDingUsers() {
        try {
            logger.info("【执行定时任务】-> 每天凌晨01:00:00，重新获取钉钉用户！");
            logger.info("【执行定时任务】-> 当前时间：{}，启动定时任务，重新获取钉钉用户。", DateUtil.now());
            // 重新获取钉钉用户
            appStartEvent.resetDbUsers();
        } catch (Exception e) {
            logger.error("【执行定时任务】-> 【捕获异常-重新获取钉钉用户】\r\n异常记录：", e);
        }
    }

    /**
     * 启动定时任务
     * 每天早上到达上班刷卡时间前2小时触发，将当前未打卡的员工，上班状态改为未打卡
     */
    /*@Scheduled(cron = "${base.scheduler.cron.uptNotClockUsers}")
    public void uptNotClockUsersTask() {
        try {
            logger.info("【执行定时任务】-> 当前时间：{}，启动定时任务，将当前未打卡的员工，上班状态改为未打卡。", DateUtil.now());
            // 重新获取考勤列表数据
            List<UserAttendanceVO> resultList = clockService.getTodayClockList2AllUser();
            String jsonString = JSONUtil.toJsonStr(resultList);
            WebSocket.sendStrInfo(jsonString);
        } catch (Exception e) {
            logger.error("【执行定时任务】-> 【捕获异常-定时任务操作】\r\n异常记录：", e);
        }
    }*/

}
